官网:古典小说网 gudianxiaoshuo.com

官网:你真正需要下载的软件 需要下载站 needdown.com

网站大全

绿色导航



位图

Window位图有两种类型:一种是GDI位图、一种是DIB位图;

GDI位图由MFC中的CBitmap类来表示,是与设备有关的位图。DIB是设备无关的位图。

CBitmap封装了Windows的GDI位图操作所需的大部分函数,其中LoadBitmap是位图初始化函数。


BOOL LoadBitmap(LPCTSTR lpszResourceName)
BOOL LoadBitmap(UINT  nIDResource)
 从应用程序中,调用一个位图资源(由nIDResource或lpszRe
sourceName指定)。



若用户直接创建一个位图对象,可使用CBitmap类中的CreateBitmap\CreateBitmapIndirect\CreateCompatibleBitmap

BOOL CreateBitmap(int nW,int nH,UINT nPlanes,

UINT nBitcount,

Const void * lpBits);

nPlanes 位图的颜色位数目

nBitcount 每个像素的颜色位数目

lpBits 包含位值得短整型数组

BOOL CreateBitmapIndirect(LPBITMAP lpBitmap)

此函数直接用BITMAP结构创建一个位图对象

BOOL CreateCompatibleBitmap(CDC*pDC,int nW,int nH)

此函数为某设备环境创建一个指定宽度高度的位图对象。

由于位图不能直接显示在实际设备中,因此对于GDI位图的显示要遵循以下步骤:


   1) 调用CBitmap类的CreateBitmap\CreateBitmapIndirect\CreateCompatibleBitmap
     创建一个适当的位图对象
   2) 调用CDC::CreateCompatibleDC创建一个内存环境,以
便位图在内存中保存下来,并与指定设备环境相兼容。
   3) 调用CDC::SelectObject函数将位图对象选入内存设备环境中
   4) 调用CDC::BitBlt或CDC::StretchBlt函数将位图复制
到实际设备环境中
   5) 使用之后,恢复原来的内存设备环境

示例:


CBitmap bmp;
 bmp.LoadBitmap(IDB_BITMAP1);
 BITMAP bm;
 bmp.GetObject(sizeof(BITMAP),&bm);
 
 CDC dcMem;
 dcMem.CreateCompatibleDC(pDC);
 CBitmap *pOldBitmap=dcMem.SelectObject(&bmp);
 
 pDC->BitBlt(80,80,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
 
 dcMem.SelectObject(pOldBmp);


通过上述代码可以看出,位图的最终显示是通过调用CDC::BitBlt函数来完成的。除此之外,也可以使用CDC::StretchBlt函数。

两者区别:StretchBlt可以伸缩,而BitBlt则不能

他们的原型如下:


BOOL BitBlt(int x,int y,int nW,int nH,CDC* pSrcDC,int nxSrc,int nySrc,DWORD dwRop);

BOOL StretchBlt(int x,int y,int nW,int nH,CDC* pSrcDC,int xSrc,int ySrc,
                int nSrcWidth,int nSrcHeight,DWORD dwRop)
                
                
                dwRop   显示位图的光栅操作方式
                常用的是SRCCOPY  直接将位图复制到目标环境中